package com.avic.system.common.convertor;


import com.avic.system.common.constant.AppConstant;
import com.avic.system.controller.info.LoginLogInfo;
import com.avic.system.controller.info.SystemUserListInfo;
import com.avic.system.dal.model.LoginLog;
import com.avic.system.dal.model.SystemUser;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * 系统用户转换去器。DO和DTO或者INFO的相关转换
 *
 * @author: huangsheng
 * @date: 2017/10/20
 */
public class SystemUserConvertor {


    /**
     * 将 pageSystemUser 转换为 SystemUserInfo
     *
     * @author: huangsheng
     * @date: 2017/10/20 下午2:00
     */
    public static SystemUserListInfo systemUserConInfo(final SystemUser systemUser) {
        if (null == systemUser) {
            return null;
        }
        SystemUserListInfo systemUserInfo = new SystemUserListInfo();
        systemUserInfo.setUserName(systemUser.getUserName());
        systemUserInfo.setUserLoginName(systemUser.getUserLoginName());
        systemUserInfo.setCreateTime(StringUtils.isNotBlank(systemUser.getCreateTime()) ?
                StringUtils.substringBefore(systemUser.getCreateTime(), AppConstant.MYBATIS_DATA_TIME_SEPARATOR) : StringUtils.EMPTY);
        systemUserInfo.setLastLoginIp(systemUser.getLastLoginIp());
        systemUserInfo.setLastLoginTime(StringUtils.isNotBlank(systemUser.getLastLoginTime()) ?
                StringUtils.substringBefore(systemUser.getLastLoginTime(), AppConstant.MYBATIS_DATA_TIME_SEPARATOR) : StringUtils.EMPTY);
        systemUserInfo.setUserId(systemUser.getId());
        systemUserInfo.setUserState(systemUser.getUserState());
        systemUserInfo.setUserPost(systemUser.getUserPost());
        systemUserInfo.setUserDept(systemUser.getUserDept());
        systemUserInfo.setModifyName(systemUser.getModifyName());
        systemUserInfo.setModifyTime(StringUtils.isNotBlank(systemUser.getModifyTime()) ?
                StringUtils.substringBefore(systemUser.getModifyTime(), AppConstant.MYBATIS_DATA_TIME_SEPARATOR) : StringUtils.EMPTY);
        return systemUserInfo;
    }

    public static List<LoginLogInfo> loginLogListToLoginLogInfoList(List<LoginLog> loginLogss) {
        List<LoginLogInfo> loginLogInfos = new ArrayList<>();
        if (null != loginLogss && loginLogss.size() > 0) {

            loginLogss.forEach(loginLog -> {
                LoginLogInfo loginLogInfo = new LoginLogInfo();
                loginLogInfo.setLastLoginTime(StringUtils.isNotBlank(loginLog.getLastLoginTime()) ?
                        StringUtils.substringBefore(loginLog.getLastLoginTime(), AppConstant.MYBATIS_DATA_TIME_SEPARATOR) : StringUtils.EMPTY);
                loginLogInfo.setCurrentLoginTime(StringUtils.isNotBlank(loginLog.getCurrentLoginTime()) ?
                        StringUtils.substringBefore(loginLog.getCurrentLoginTime(), AppConstant.MYBATIS_DATA_TIME_SEPARATOR) : StringUtils.EMPTY);
                loginLogInfo.setLoginIp(loginLog.getLoginIp());
                if (null != loginLog.getLoginDuration() && loginLog.getLoginDuration().compareTo(new BigDecimal(60 * 60)) == -1) {
                    if (loginLog.getLoginDuration().compareTo(new BigDecimal(60)) == -1) {
                        loginLogInfo.setLoginDuration(loginLog.getLoginDuration() + "秒");
                    } else {
                        loginLogInfo.setLoginDuration(loginLog.getLoginDuration().divide(new BigDecimal(60), 0, BigDecimal.ROUND_HALF_UP) + "min");
                    }
                } else {
                    loginLogInfo.setLoginDuration(null != loginLog.getLoginDuration() ?
                            loginLog.getLoginDuration().divide(new BigDecimal(60 * 60), 1, BigDecimal.ROUND_HALF_UP) + "H" : StringUtils.EMPTY);
                }
                loginLogInfo.setUserName(loginLog.getUserName());
                loginLogInfo.setUserLoginName(loginLog.getUserLoginName());
                loginLogInfos.add(loginLogInfo);

            });
        }
        return loginLogInfos;
    }
}
